var request = require("request");
var cheerio = require("cheerio");
var async = require("async");
var debug = require("debug")("blog:update");

/*
	获取分类页面博客列表
	@PARAM {STRING} URL
	@param {function} callback
	这里没有写获取下一页，需要的话拷贝其他js文件里面的源码过来
	
*/
function readArticleList(url, callback) {
    debug("读取博文列表:%s", url)
    request(url, function(err, res) {
        if (err) return callback(err);
        var articleList = [];
        var $ = cheerio.load(res.body.toString());
        $(".articleList .articleCell").each(function() {
            var $me = $(this);
            var $title = $me.find(".atc_title a");
            var $time = $me.find(".atc_tm");
            var item = {
                    title: $title.text().trim(),
                    url: $title.attr("href"),
                    time: $time.text().trim()
                }
                console.log(item.title)
                //从url里面读取文章的ID
            var s = item.url.match(/blog_([a-z-A-Z0-9]+)\.html/);
            if (Array.isArray(s)) {
                item.id = s[1];
            }
            articleList.push(item);
        })
        callback(null, articleList)

    });
}
/*
	获取博文页面内容
	@param {string} url
	@param {function} callback
*/
function readArticleDetail(url, callback) {
    debug("读取博文内容:%s", url)
    request(url, function(err, res) {
        if (err) return callback(err);
        var $ = cheerio.load(res.body.toString());
        //获取文章标签
        var tags = [];
        $(".blog_tag h3 a").each(function() {
            var tag = $(this).text().trim();
            if (tag) {
                tags.push(tag);
            }
        });
        //获取文章
        var content = $(".articalContent").html().trim();
        //输出结果
     //   console.log({ tags: tags, content: content });
        callback(null, { tags: tags, content: content })
    })
}
/*
	读取分类下的所有文章
*/
readArticleList("http://blog.sina.com.cn/s/articlelist_1776757314_0_1.html", function(err, articleList) {
    if (err) return console.error(err.stack);
    /*
     *依次取出articleList数组中的每个元素，嗲用第二个参数中传入的函数
     *函数的第一个参数即使artcleList数组中的其中一个元素
     *函数的第二个参数是回调函数
     */
    async.eachSeries(articleList, function(article, next) {
        //读取文章内容
        readArticleDetail(article.url, function(err, detail) {
        	if(err) console.log(err.stack);
        	//直接显示
        	//console.log(detail);
        	//需要调用next来返回
        	next();
        })
    },function(err){
    	//这里是遍历完articleList后的回调函数
    	if(err) return console.log(err.atack);
    	console.log("完成")
    })
})
